using System;
using Microsoft.Win32;
using Dpapi;

namespace DasBlogNewsGatorPlugin
{
	/// <summary>
	/// Summary description for ConfigInfo.
	/// </summary>
	public class ConfigInfo
	{
		public ConfigInfo()
		{
		}

		static public string WeblogUrl
		{
			get
			{
				RegistryKey regKey = Registry.CurrentUser.OpenSubKey(keyName);
				string id = "";
				if (regKey != null)
				{
					id = regKey.GetValue("WeblogUrl", "").ToString();
					regKey.Close();
				}
				return id;
			}
			set
			{
				RegistryKey regKey = Registry.CurrentUser.CreateSubKey(keyName);
				regKey.SetValue("WeblogUrl", value);
				regKey.Close();
			}
		}

		static public string Username
		{
			get
			{
				RegistryKey regKey = Registry.CurrentUser.OpenSubKey(keyName);
				string id = "";
				if (regKey != null)
				{
					id = regKey.GetValue("Username", "").ToString();
					regKey.Close();
				}
				return id;
			}
			set
			{
				RegistryKey regKey = Registry.CurrentUser.CreateSubKey(keyName);
				regKey.SetValue("Username", value);
				regKey.Close();
			}
		}

		static public string Password
		{
			get
			{
				RegistryKey regKey = Registry.CurrentUser.OpenSubKey(keyName);
				string id = "";
				if (regKey != null)
				{
					id = regKey.GetValue("Password", "").ToString();
					regKey.Close();

					// DPAPI isn't supported on Windows 2000
					if (Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor > 0)
					{
						try
						{
							Dpapi.DataProtector dp = new DataProtector(Dpapi.Store.UserStore);
							byte[] sourceBytes = Convert.FromBase64String(id);
							byte[] decryptedBytes = dp.Decrypt(sourceBytes);
							id = System.Text.Encoding.Unicode.GetString(decryptedBytes);
						}
						catch
						{
							id = "";
						}
					}
				}
				return id;
			}
			set
			{
				RegistryKey regKey = Registry.CurrentUser.CreateSubKey(keyName);

				if (Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor > 0)
				{
					try
					{
						Dpapi.DataProtector dp = new DataProtector(Dpapi.Store.UserStore);
						byte[] sourceBytes = System.Text.Encoding.Unicode.GetBytes(value);
						byte[] encryptedBytes = dp.Encrypt(sourceBytes);

						regKey.SetValue("Password", Convert.ToBase64String(encryptedBytes));
					}
					catch
					{
						regKey.SetValue("Password", value);
					}
				}
				else
				{
					regKey.SetValue("Password", value);
				}

				regKey.Close();
			}
		}

		static public bool IncludeMedia
		{
			get
			{
				RegistryKey regKey = Registry.CurrentUser.OpenSubKey(keyName);
				int d = 0;
				if (regKey != null)
				{
					d = Int32.Parse(regKey.GetValue("IncludeMedia", 0).ToString());
					regKey.Close();
				}
				return (d != 0);
			}
			set
			{
				RegistryKey regKey = Registry.CurrentUser.CreateSubKey(keyName);
				regKey.SetValue("IncludeMedia", value ? 1 : 0);
				regKey.Close();
			}
		}

		static public string MediaTemplate
		{
			get
			{
				RegistryKey regKey = Registry.CurrentUser.OpenSubKey(keyName);
				string id = "<div><p>[Now Playing: {$author} - {$title} ({$duration})]</p></div>";
				if (regKey != null)
				{
					id = regKey.GetValue("MediaTemplate", id).ToString();
					regKey.Close();
				}
				return id;
			}
			set
			{
				RegistryKey regKey = Registry.CurrentUser.CreateSubKey(keyName);
				regKey.SetValue("MediaTemplate", value);
				regKey.Close();
			}
		}

		static protected string keyName = "Software\\RAI\\NewsGator\\dasBlogPlugin";

	}
}
